package com.briercliffe.settlers.core.domain;

/**
 * @author mbriercl
 */
public interface CoinBag
{
    /**
     * <p>
     * Get the coin that should be applied to the next tile. This is
     * where the coin bag can choose what tile coin values will be used in
     * the game. This is called for each applicable tile in row-major order
     * according to the Odd-R offset representation of the {@link Layout}.
     * </p>
     * <p>
     * Tiles of resource type {@link ResourceType#BLANK}, {@link ResourceType#WATER}, and
     * {@link ResourceType#DESERT} are not applicable for receiving a tile coin and will be
     * skipped over during the iteration through the board layout.
     * </p>
     * @return The next tile coin to be placed.
     */
    public TileCoin getNextCoin();

    /**
     * Checks if the coin bag has any coins left in it.
     *
     * @return True if the coin bag is not empty, false otherwise.
     */
    public boolean hasNext();

}
